//1. 导入 express
const express = require('express');
//导入 moment
const moment = require('moment');
const jwt = require('jsonwebtoken');

const AccountModel = require('../../models/AccountModel');
const { secret } = require('../../config/config');

//2. 创建路由对象
const router = express.Router();

//声明中间件 负责jwt验证
const checktokenlogin = (req, res, next) => {
  //获取token
  const token = req.get('token')
  //判断
  if (!token) {
    return res.json({
      code: '2004',
      msg: 'token 缺失',
      data: null
    })
  }
  //校验 token
  jwt.verify(token, secret, (err, data) => {
    if (err) {
      return res.json({
        code: '2005',
        msg: 'token 校验失败~~',
        data: null
      })
    }
  });
  //保存用户的信息
  req.user = data;
  //放行
  next();
}

//3. 创建路由规则
//记账本的列表
router.get('/account', checktokenlogin,(req, res) => {
  // res.send('账单首页');
  AccountModel.find().sort({ time: -1 }).exec().then(data => {
    res.json({ code: '0000', msg: '获取成功', data: data })
  }).catch(err => {
    res.json({ code: '1001', msg: '获取失败', data: null });
  });
});
//添加记录
router.get('/account/create', checktokenlogin,(req, res) => {
  // res.send('添加账单');
  res.render('create');
});

//新增记录
router.post('/account', checktokenlogin,(req, res) => {
  AccountModel.create({
    ...req.body,
    time: moment(req.body.time).toDate()
  })
    .then((data) => {
      res.json({ code: '0000', msg: '添加成功哦~~', data });
    })
    .catch((err) => {
      console.error('数据库插入失败:', err);
      //表单验证
      if (!req.body.content || !req.body.type || !req.body.money) {
        return res.json({ code: '1002', msg: '参数不齐全', data: null });
      }
      if (typeof req.body.money !== 'number') {
        return res.json({ code: '1003', msg: '金额必须是数字', data: null });
      }

      if (req.body.money < 0) {
        return res.json({ code: '1004', msg: '金额不能为负数', data: null });
      }
      // res.json({ code: '1004', msg: '插入失败~~', data: null });
    })

});

//删除记录
router.delete('/account/:id', checktokenlogin,(req, res) => {
  AccountModel.deleteOne({ _id: req.params.id }).then(data => {
    // res.render('success', { msg: '删除成功~~~', url: '/account' });
    res.json({ code: '0000', msg: '删除成功~~~', data: {} });
  }).catch(err => {
    res.json({ code: '1005', msg: '删除失败~', data: null });
  });
});

//获取单个账单信息
router.get('/account/:id', checktokenlogin,(req, res) => {
  AccountModel.findOne({ _id: req.params.id }).then(data => {
    res.json({ code: '0000', msg: '查询成功', data: data });
  }).catch(err => {
    res.json({ code: '1006', msg: '查询失败', data: null });
  });
})

//更新账单信息
router.patch('/account/:id', checktokenlogin,async (req, res) => {
  try {
    const updatedData = await AccountModel.findOneAndUpdate(
      { _id: req.params.id },
      req.body,
      { new: true, runValidators: true } // new:true返回更新后的文档
    );

    if (!updatedData) {
      return res.status(404).json({
        code: '1008',
        msg: '未找到对应记录',
        data: null
      });
    }

    res.json({
      code: '0000',
      msg: '更新成功',
      updatedData //返回完整的更新后文档
    });

  } catch (err) {
    console.error('更新失败:', err);

    let errorMsg = '更新失败';
    if (err.name === 'ValidationError') {
      errorMsg = Object.values(err.errors).map(e => e.message).join(', ');
    }

    res.status(500).json({
      code: err.code || '1007',
      msg: errorMsg,
      data: null
    });
  }
});


//4. 暴露 router
module.exports = router;
